package com.mmall.common.base;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * 分页对象
 *
 * @author: gg
 * @date: 2018/12/10 17:37
 */
@Data
public class Page implements Serializable {

    private static final long serialVersionUID = -2937537029915876600L;

    /**
     * 第几页 前端传递
     */
    @JsonIgnore
    @ApiModelProperty(value="第几页")
    private Integer pageNo;

    /**
     * 页面容量 前端传递
     */
    @JsonIgnore
    @ApiModelProperty(value="页面容量")
    private Integer pageSize;

    /**
     * 分页开始 sql使用
     */
    @JsonIgnore
    private Integer pageStart;

    /**
     * 限制条数 sql使用
     */
    @JsonIgnore
    private Integer limit;

    protected Page() {

    }

    public Page(Integer pageNo, Integer pageSize) {
        this.pageNo = pageNo;
        this.pageSize = pageSize;
    }


    /**
     * 初始化分页
     *
     * @param page 分页
     */
    public static void initPage(Page page) {
        if (page == null) {
            page = new Page();
        }
        if (page.getPageNo() == null) {
            page.setPageNo(1);
        }
        if (page.getPageSize() == null) {
            page.setPageSize(20);
        }
        page.setPageStart((page.getPageNo() - 1) * page.getPageSize());
        page.setLimit(page.getPageSize() * page.getPageNo());
    }

    /**
     * poi表格分页初始化方法
     * 默认500页
     *
     * @param page 分页
     */
    public static void initPagePoi(Page page) {
        if (page == null) {
            page = new Page();
        }
        if (page.getPageNo() == null) {
            page.setPageNo(1);
        }
        if (page.getPageSize() == null) {
            page.setPageSize(500);
        }
        page.setPageStart((page.getPageNo() - 1) * page.getPageSize());
    }

    /**
     * 自定义分页
     *
     * @param page            分页
     * @param defaultPageSize 默认数量
     */
    public static void initPage(Page page, int defaultPageSize) {
        if (page == null) {
            page = new Page();
        }
        if (page.getPageNo() == null) {
            page.setPageNo(1);
        }
        if (page.getPageSize() == null) {
            page.setPageSize(defaultPageSize);
        }

    }
}

